{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cross_validation import train_test_split\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neural_network import BernoulliRBM\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "from sklearn.pipeline import Pipeline\n",
    "import numpy as np\n",
    "import argparse\n",
    "import time\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.utils import resample\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(\"creditcard.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(284807, 31)"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,u'Frequency')"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbf9cd47c90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "LABELS = [\"Normal\", \"Fraud\"]\n",
    "count_classes = pd.value_counts(df['Class'], sort = True)\n",
    "count_classes.plot(kind = 'bar', rot=0)\n",
    "plt.title(\"Transaction class distribution\")\n",
    "plt.xticks(range(2), LABELS)\n",
    "plt.xlabel(\"Class\")\n",
    "plt.ylabel(\"Frequency\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "data = df.drop(['Time'], axis=1)\n",
    "\n",
    "#data['Amount'] = MinMaxScaler().fit_transform(data['Amount'].values.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [],
   "source": [
    "data.iloc[:,0:29] = MinMaxScaler().fit_transform(data.iloc[:,0:29].values.reshape(-1, 29))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.93519234,  0.76649042],\n",
       "       [ 0.97854195,  0.77006665],\n",
       "       [ 0.93521702,  0.75311767],\n",
       "       ..., \n",
       "       [ 0.99090481,  0.76407969],\n",
       "       [ 0.954209  ,  0.77285574],\n",
       "       [ 0.94923176,  0.7652564 ]])"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "MinMaxScaler().fit_transform(data.loc[:,['V1','V2']].values.reshape(-1, 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = data['Class']\n",
    "X = data.iloc[:,0:29]\n",
    "\n",
    "(trainX, testX, trainY, testY) = train_test_split(X, y, test_size = 0.2, random_state = 42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [],
   "source": [
    "(trainSet, testSet) = train_test_split(data, test_size = 0.2, random_state = 42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_majority = trainSet[trainSet.Class==0]\n",
    "df_minority = trainSet[trainSet.Class==1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Upsample minority class\n",
    "df_minority_upsampled = resample(df_minority, \n",
    "                                 replace=True,     # sample with replacement\n",
    "                                 n_samples=60000,    # to match majority class\n",
    "                                 random_state=123) # reproducible results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Combine majority class with upsampled minority class\n",
    "df_upsampled = pd.concat([df_majority, df_minority_upsampled])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    227451\n",
       "1     60000\n",
       "Name: Class, dtype: int64"
      ]
     },
     "execution_count": 237,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " # Display new class counts\n",
    "df_upsampled.Class.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [],
   "source": [
    "trainY = df_upsampled['Class']\n",
    "trainX = df_upsampled.iloc[:,0:29]\n",
    "\n",
    "testY = testSet['Class']\n",
    "testX = testSet.iloc[:,0:29]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[BernoulliRBM] Iteration 1, pseudo-likelihood = -17.29, time = 4.39s\n",
      "[BernoulliRBM] Iteration 2, pseudo-likelihood = -17.31, time = 7.20s\n",
      "[BernoulliRBM] Iteration 3, pseudo-likelihood = -17.35, time = 6.49s\n",
      "[BernoulliRBM] Iteration 4, pseudo-likelihood = -17.21, time = 6.45s\n",
      "[BernoulliRBM] Iteration 5, pseudo-likelihood = -17.15, time = 6.43s\n",
      "[BernoulliRBM] Iteration 6, pseudo-likelihood = -17.13, time = 6.41s\n",
      "[BernoulliRBM] Iteration 7, pseudo-likelihood = -17.28, time = 6.41s\n",
      "[BernoulliRBM] Iteration 8, pseudo-likelihood = -17.13, time = 6.41s\n",
      "[BernoulliRBM] Iteration 9, pseudo-likelihood = -16.97, time = 6.41s\n",
      "[BernoulliRBM] Iteration 10, pseudo-likelihood = -17.16, time = 6.40s\n",
      "[BernoulliRBM] Iteration 11, pseudo-likelihood = -17.04, time = 6.42s\n",
      "[BernoulliRBM] Iteration 12, pseudo-likelihood = -17.18, time = 6.43s\n",
      "[BernoulliRBM] Iteration 13, pseudo-likelihood = -17.15, time = 6.39s\n",
      "[BernoulliRBM] Iteration 14, pseudo-likelihood = -17.10, time = 6.43s\n",
      "[BernoulliRBM] Iteration 15, pseudo-likelihood = -16.96, time = 6.40s\n",
      "[BernoulliRBM] Iteration 16, pseudo-likelihood = -16.94, time = 6.39s\n",
      "[BernoulliRBM] Iteration 17, pseudo-likelihood = -17.11, time = 6.40s\n",
      "[BernoulliRBM] Iteration 18, pseudo-likelihood = -17.04, time = 7.52s\n",
      "[BernoulliRBM] Iteration 19, pseudo-likelihood = -17.23, time = 6.63s\n",
      "[BernoulliRBM] Iteration 20, pseudo-likelihood = -17.07, time = 6.39s\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       1.00      1.00      1.00     56864\n",
      "          1       0.83      0.26      0.39        98\n",
      "\n",
      "avg / total       1.00      1.00      1.00     56962\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rbm = BernoulliRBM(n_components = 100, n_iter = 20, learning_rate = 0.06,  verbose = True)\n",
    "\n",
    "logistic = LogisticRegression(C = 1.0)\n",
    "\n",
    "# train the classifier and show an evaluation report\n",
    "classifier = Pipeline([(\"rbm\", rbm), (\"logistic\", logistic)])\n",
    "classifier.fit(trainX, trainY)\n",
    "\n",
    "print classification_report(testY, classifier.predict(testX))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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r1+fW2+9db1jSZUSRaKXXgotBwhF/KZNg/32y2xMIrLeBg8ezD777MOQIUNSfs0///lPvvnmG6ZOncrUqVMZPnw4y5YtW684pk+fzpAhQ5g2bRpvvPEG5557LmvWrFlnnbVr19K3b1+GDBnC1KlT2WGHHXjssccA2GKLLbj77ru59NJL1yuO6lLXE8C338IFF8Bzz4VB60suCfWZVMRPpNZcdFG47Kg2tWsHd96ZfJ3ly5czduxYRo4cydFHH80111xT5XZ/+eUXHnroIebNm0f9+vUB+MMf/kCvXr3WK96XX36Z3r17U79+fZo3b06LFi2YMGECXbp0+W2dxYsXU79+fXbeeWcAunbtyg033MAZZ5zB1ltvzdZbb82rr766XnFUV2G3KNzhiSegVSt4+WX417/CGU4q4ieSN1566SW6devGzjvvzBZbbMFHH31U5Wtmz57N9ttvz6YpdDkPGDCAdu3a/e5x4403/m7dr776iqZNm/42XVRUxFdffbXOOk2aNGHVqlVMmhQuAxg6dCgLFiyoMo44FfZP5vnz4cwzoUOHcHX1rrtmOiKRvFXVL/+4DB48mIsuugiA3r17M3jwYNq3b1/p2UHVPWvojjvuSHndiq5bK78/M2PIkCEMGDCAlStXcuihh7JBhns3Ci9RlBbxO/zwUMRv7NhQ7VX1mUTyzuLFi3n33XeZOnUqZsaaNWswM26++Wa23HJLlixZss76P/zwA02aNKFFixbMnz+fZcuW0ahRo6T7GDBgACNHjvzd/N69e3PFFVesM6+oqGid1kFxcTHbVlDZoUuXLrz//vsAjBgxgs8++yzl9xwLd8+pR8OGe3qNzZrlvu++7uA+alTNtyMiKZk+fXpG9//AAw94//7915m33377+ejRo72kpMSbNWv2W4xffPGFb7/99r506VJ3d7/sssu8X79+vnLlSnd3//rrr/2JJ55Yr3imTp3qbdu29ZKSEp87d643b97cV69e/bv1vv32W3d3Lykp8YMOOsjfeeeddZZfffXVfsstt1S6n4qOOzDJa/i9WxhjFKtXw003hSJ+n34K//mPzmYSKQCDBw/mL3/5yzrzevbsydNPP039+vV58sknOe2002jXrh3HHXccgwYNonHjxgBcf/31bLXVVrRq1Yo2bdpwzDHHsNVWW61XPK1bt6ZXr160atWKbt26ce+9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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbfa0966f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve, auc  \n",
    "predictions = classifier.predict_proba(testX)  \n",
    "false_positive_rate, recall, thresholds = roc_curve(testY, predictions[:, 1])  \n",
    "roc_auc = auc(false_positive_rate, recall)  \n",
    "plt.title('Receiver Operating Characteristic')  \n",
    "plt.plot(false_positive_rate, recall, 'b', label='AUC = %0.2f' % roc_auc)  \n",
    "plt.legend(loc='lower right')  \n",
    "plt.plot([0, 1], [0, 1], 'r--')  \n",
    "plt.xlim([0.0, 1.0])  \n",
    "plt.ylim([0.0, 1.0])\n",
    "plt.ylabel('True Positive Rate')  \n",
    "plt.xlabel('False Positive Rate')  \n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,u'2-class Precision-Recall curve: AP=0.66')"
      ]
     },
     "execution_count": 252,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbfa3f4d950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import average_precision_score\n",
    "from sklearn.metrics import precision_recall_curve\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "predictions = classifier.predict_proba(testX) \n",
    "\n",
    "average_precision = average_precision_score(testY, predictions[:, 1])\n",
    "\n",
    "precision, recall, _ = precision_recall_curve(testY, predictions[:, 1])\n",
    "\n",
    "plt.step(recall, precision, color='b', alpha=0.2,where='post')\n",
    "plt.fill_between(recall, precision, step='post', alpha=0.2,color='b')\n",
    "\n",
    "plt.xlabel('Recall')\n",
    "plt.ylabel('Precision')\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.title('2-class Precision-Recall curve: AP={0:0.2f}'.format(average_precision))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       1.00      0.99      1.00     56864\n",
      "          1       0.21      0.87      0.33        98\n",
      "\n",
      "avg / total       1.00      0.99      1.00     56962\n",
      "\n"
     ]
    }
   ],
   "source": [
    "logistic = LogisticRegression(C = 1.0)\n",
    "logistic.fit(trainX, trainY)\n",
    "print classification_report(testY, logistic.predict(testX))\t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbfa3d2db90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictions = logistic.predict_proba(testX)  \n",
    "false_positive_rate, recall, thresholds = roc_curve(testY, predictions[:, 1])  \n",
    "roc_auc = auc(false_positive_rate, recall)  \n",
    "plt.title('Receiver Operating Characteristic')  \n",
    "plt.plot(false_positive_rate, recall, 'b', label='AUC = %0.2f' % roc_auc)  \n",
    "plt.legend(loc='lower right')  \n",
    "plt.plot([0, 1], [0, 1], 'r--')  \n",
    "plt.xlim([0.0, 1.0])  \n",
    "plt.ylim([0.0, 1.0])\n",
    "plt.ylabel('True Positive Rate')  \n",
    "plt.xlabel('False Positive Rate')  \n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,u'2-class Precision-Recall curve: AP=0.74')"
      ]
     },
     "execution_count": 249,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbfa3de2e90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictions = logistic.predict_proba(testX)\n",
    "\n",
    "average_precision = average_precision_score(testY, predictions[:, 1])\n",
    "\n",
    "precision, recall, _ = precision_recall_curve(testY, predictions[:, 1])\n",
    "\n",
    "plt.step(recall, precision, color='b', alpha=0.2,where='post')\n",
    "plt.fill_between(recall, precision, step='post', alpha=0.2,color='b')\n",
    "\n",
    "plt.xlabel('Recall')\n",
    "plt.ylabel('Precision')\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.title('2-class Precision-Recall curve: AP={0:0.2f}'.format(average_precision))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[BernoulliRBM] Iteration 1, pseudo-likelihood = -17.14, time = 4.39s\n",
      "[BernoulliRBM] Iteration 2, pseudo-likelihood = -17.14, time = 6.54s\n",
      "[BernoulliRBM] Iteration 3, pseudo-likelihood = -17.22, time = 6.53s\n",
      "[BernoulliRBM] Iteration 4, pseudo-likelihood = -17.08, time = 6.51s\n",
      "[BernoulliRBM] Iteration 5, pseudo-likelihood = -17.24, time = 6.48s\n",
      "[BernoulliRBM] Iteration 6, pseudo-likelihood = -17.02, time = 6.47s\n",
      "[BernoulliRBM] Iteration 7, pseudo-likelihood = -17.04, time = 6.46s\n",
      "[BernoulliRBM] Iteration 8, pseudo-likelihood = -17.16, time = 6.46s\n",
      "[BernoulliRBM] Iteration 9, pseudo-likelihood = -17.08, time = 6.45s\n",
      "[BernoulliRBM] Iteration 10, pseudo-likelihood = -17.13, time = 6.46s\n",
      "[BernoulliRBM] Iteration 11, pseudo-likelihood = -17.10, time = 6.45s\n",
      "[BernoulliRBM] Iteration 12, pseudo-likelihood = -16.97, time = 6.48s\n",
      "[BernoulliRBM] Iteration 13, pseudo-likelihood = -16.96, time = 6.45s\n",
      "[BernoulliRBM] Iteration 14, pseudo-likelihood = -17.11, time = 6.46s\n",
      "[BernoulliRBM] Iteration 15, pseudo-likelihood = -17.03, time = 6.44s\n",
      "[BernoulliRBM] Iteration 16, pseudo-likelihood = -17.14, time = 6.45s\n",
      "[BernoulliRBM] Iteration 17, pseudo-likelihood = -16.88, time = 6.50s\n",
      "[BernoulliRBM] Iteration 18, pseudo-likelihood = -17.04, time = 6.44s\n",
      "[BernoulliRBM] Iteration 19, pseudo-likelihood = -17.06, time = 6.44s\n",
      "[BernoulliRBM] Iteration 20, pseudo-likelihood = -17.10, time = 6.43s\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       1.00      1.00      1.00     56864\n",
      "          1       0.40      0.79      0.53        98\n",
      "\n",
      "avg / total       1.00      1.00      1.00     56962\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rbm = BernoulliRBM(n_components = 100, n_iter = 20,learning_rate = 0.06,  verbose = True)\n",
    "\n",
    "logistic = LogisticRegression(C = 600.0)\n",
    "\n",
    "# train the classifier and show an evaluation report\n",
    "classifier_3 = Pipeline([(\"rbm\", rbm), (\"logistic\", logistic)])\n",
    "classifier_3.fit(trainX, trainY)\n",
    "\n",
    "print classification_report(testY, classifier_3.predict(testX))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[BernoulliRBM] Iteration 1, pseudo-likelihood = -17.32, time = 4.42s\n",
      "[BernoulliRBM] Iteration 2, pseudo-likelihood = -17.18, time = 6.50s\n",
      "[BernoulliRBM] Iteration 3, pseudo-likelihood = -17.08, time = 6.46s\n",
      "[BernoulliRBM] Iteration 4, pseudo-likelihood = -17.29, time = 6.47s\n",
      "[BernoulliRBM] Iteration 5, pseudo-likelihood = -17.11, time = 6.44s\n",
      "[BernoulliRBM] Iteration 6, pseudo-likelihood = -17.20, time = 6.45s\n",
      "[BernoulliRBM] Iteration 7, pseudo-likelihood = -17.27, time = 6.44s\n",
      "[BernoulliRBM] Iteration 8, pseudo-likelihood = -17.04, time = 6.44s\n",
      "[BernoulliRBM] Iteration 9, pseudo-likelihood = -17.15, time = 7.15s\n",
      "[BernoulliRBM] Iteration 10, pseudo-likelihood = -17.02, time = 6.43s\n",
      "[BernoulliRBM] Iteration 11, pseudo-likelihood = -17.02, time = 6.41s\n",
      "[BernoulliRBM] Iteration 12, pseudo-likelihood = -17.09, time = 6.43s\n",
      "[BernoulliRBM] Iteration 13, pseudo-likelihood = -17.03, time = 6.80s\n",
      "[BernoulliRBM] Iteration 14, pseudo-likelihood = -17.08, time = 6.65s\n",
      "[BernoulliRBM] Iteration 15, pseudo-likelihood = -17.20, time = 6.41s\n",
      "[BernoulliRBM] Iteration 16, pseudo-likelihood = -17.14, time = 6.41s\n",
      "[BernoulliRBM] Iteration 17, pseudo-likelihood = -17.06, time = 6.41s\n",
      "[BernoulliRBM] Iteration 18, pseudo-likelihood = -17.10, time = 6.43s\n",
      "[BernoulliRBM] Iteration 19, pseudo-likelihood = -17.07, time = 6.40s\n",
      "[BernoulliRBM] Iteration 20, pseudo-likelihood = -17.22, time = 6.43s\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       1.00      1.00      1.00     56864\n",
      "          1       0.65      0.85      0.73        98\n",
      "\n",
      "avg / total       1.00      1.00      1.00     56962\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import VotingClassifier\n",
    "# create the sub models\n",
    "estimators = []\n",
    "model1 = classifier\n",
    "estimators.append(('logistic', model1))\n",
    "model2 = logistic\n",
    "estimators.append(('cart', model2))\n",
    "# create the ensemble model\n",
    "ensemble = VotingClassifier(estimators,voting='soft')\n",
    "\n",
    "ensemble = ensemble.fit(trainX, trainY)\n",
    "\n",
    "print classification_report(testY, ensemble.predict(testX))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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irVr15Yrjjlz5jB8+HBmz57NW2+9xaWXXsrmzZu3WmfLli306dOH4cOHM2vWLPbZZx+eeuopAAYNGkSTJk2YMWMG48aNY8CAAfxSUEsuidT1BPDtt3DFFfDii2HQesCAUJ9JRfxEKsxVV4XLjipSy5Zw773x11m3bh0TJ05k7NixnHLKKdx4442lbvfnn3/m0UcfZfHixVSvXh2A3//+9/Ts2bNc8b722mv06tWL6tWr07BhQxo1asSUKVNo3779r+usXLmS6tWrs//++wPQqVMnbr31Vi644ALMjLVr1+LurFu3jt12243tUvA9VblbFO4wdCg0aQKvvQb//nc4w0lF/ERyxquvvkrnzp3Zf//92W233fj0009Lfc2CBQvYe++92TmBLuf+/fvTsmXL3zz+85///GbdZcuWUb9+/V+n69Wrx7Jly7Zap06dOmzcuJGpU8NlACNGjGDp0qUAXH755cydO5e99tqLgw8+mPvuu48qVZL/NV65fzIvWQIXXgitW4erqw88MN0RieSs0n75J8uwYcO46qqrAOjVqxfDhg2jVatWJZ4dtK1nDd1zzz0Jr1vcdWtF92dmDB8+nP79+7NhwwaOP/74X1sNo0ePpmXLlowZM4aFCxfSqVMnOnTokFBCK4/KlygKivideGIo4jdxYqj2qvpMIjln5cqVjBkzhlmzZmFmbN68GTPj9ttvZ/fdd2fVqlVbrf/DDz9Qp04dGjVqxJIlS1i7di21atWKu4/+/fszduzY38zv1asXAwcO3GpevXr1fm0dAOTl5bFXMZUd2rdvzwcffADA22+/zeeffw7AE088wcCBAzEzGjVqRMOGDZk3bx5t2rRJ7ICUlbtn1aNmzUO9zObPd+/QwR3cx40r+3ZEJCFz5sxJ6/4ffvhh79ev31bzjjzySB8/frzn5+d7gwYNfo3xyy+/9L333ttXr17t7u7XXnut9+3b1zds2ODu7l9//bUPHTq0XPHMmjXLmzdv7vn5+b5o0SJv2LChb9q06Tfrffvtt+7unp+f78cee6y/99577u5+8cUX+w033ODu7suXL/e99trLV6xY8ZvXF3fcgalexu/dyjFGsWkT3HZbKOL32WfwxBM6m0mkEhg2bBh/+tOftprXo0cPnnvuOapXr84zzzzDeeedR8uWLTnttNMYMmQItWvXBuCWW25hjz32oEmT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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbfb6d3c210>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictions = ensemble.predict_proba(testX)  \n",
    "false_positive_rate, recall, thresholds = roc_curve(testY, predictions[:, 1])  \n",
    "roc_auc = auc(false_positive_rate, recall)  \n",
    "plt.title('Receiver Operating Characteristic')  \n",
    "plt.plot(false_positive_rate, recall, 'b', label='AUC = %0.2f' % roc_auc)  \n",
    "plt.legend(loc='lower right')  \n",
    "plt.plot([0, 1], [0, 1], 'r--')  \n",
    "plt.xlim([0.0, 1.0])  \n",
    "plt.ylim([0.0, 1.0])\n",
    "plt.ylabel('True Positive Rate')  \n",
    "plt.xlabel('False Positive Rate')  \n",
    "plt.show()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2.7",
   "language": "python",
   "name": "python27"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
